要怎麼樣才能提早終止程式運行
一般來說程式會跑完所有的指令或是執行到非預期的程式碼。但是如果你正在撰寫一個不需要跑整天的 Ruby 程式,你也許會想要因為一個理由或其他原因終止程式,有一些方法可以讓你執行終止程式。
來看看要怎麼執行
有許多不同的方法可以終止一個程式,
當你呼叫 exit 你的程式不會立刻停止。因為過程是這樣子的,當 Ruby 發生了 SystemExit exception 會讓其他部分的程式法有清除的機會。.
跑看看以下範例:
begin
exit
rescue SystemExit
p 123
end
這裡在跳出前會先印出123
如果你想要跳過這個清理程序可以使用 exit!
。
如下:
begin
exit!
rescue SystemExit
p 123
end
注意在這裡在程式結束之前並不會印出123,你也可以使用其他方法稱作 abort,這個方法可以讓你放錯誤訊息。
abort "No Bacon Left"
跟下面這個一樣:
warn "No Bacon Left!"
exit1
這個“警告”方法在標準錯誤中會印出一個錯誤訊息,那在 exit 後面的 “1” 引數又是什麼?這就是接下來要討論的東西了。
當一個程式結束的時候,不只是 ruby 程式而是所有的程式,都會留下一個狀態碼在後面。這就是你必須要知道的東西:
狀態碼為 “0“ 代表程式正常結束,而其他的狀態碼同常都是其他錯誤狀態的訊號。回傳”0“以外的狀態碼效果取決於你當下的環境,這對運行系統或一般程式是有幫助的,可以透過狀態碼去監測、記錄檔案甚至重新啟動運行失敗的程式。
在 Linux,你可以使用 echo $?
去找到上一個程式結束的狀態碼。
讓我們回到 ruby,當你呼叫 exit 預設的狀態碼為“0“。你可以傳另一個狀態碼當作一個引數。這就是為什麼當你呼叫 abort 之後狀態碼會設定為”1“,abort 方法通常是標記錯誤。
如果你只想要終止一個回圈而不要終止整個程式,那你就要用一些不一樣的方法,你可以使用break
關鍵字:
while 1 == 1
break
end
不只是 while 迴圈,在 blocks 裡也是有作用的。
ruby 方法會在最後一行程式碼自然結束,但如果你想要提早結束方法的話就可以使用return
關鍵字。
def apples
return "I had my two apples today"
"bacon"
end
這段程式碼永遠不會拿到"bacon"
因為在哪之前就已經return
了
當無限迴圈發生的時候...
Soon or later. It will happen.
有時候你忘記增加變數或意外製造無限迴圈,你可以使用這招
CTRL+C